package com.chen;

import java.util.Scanner;
import java.util.logging.Level;

public class TestLibrary {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        try {
            LibraryManager libraryManager = new LibraryManager();
            while (true) {
                // 打印系统菜单
                System.out.println("==========chen图书管理系统=========");
                System.out.println("1. 添加图书");
                System.out.println("2. 删除图书");
                System.out.println("3. 借阅图书");
                System.out.println("4. 归还图书");
                System.out.println("5. 显示所有图书");
                System.out.println("6. 查询借阅图书");
                System.out.println("7. 查询图书");
                System.out.println("8. 退出系统");
                System.out.println("请输入您的选择:");

                int type = sc.nextInt();

                switch (type) {
                    case 1:
                        LibraryLog.log(Level.INFO, "添加图书");
                        addBook(sc, libraryManager); // 调用添加图书方法
                        break;
                    case 2:
                        LibraryLog.log(Level.INFO, "删除图书");
                        removeBook(sc, libraryManager); // 调用删除图书方法
                        break;
                    case 3:
                        LibraryLog.log(Level.INFO, "借阅图书");
                        borrowBook(sc, libraryManager); // 调用借阅图书方法
                        break;
                    case 4:
                        LibraryLog.log(Level.INFO, "归还图书");
                        returnBook(sc, libraryManager); // 调用归还图书方法
                        break;
                    case 5:
                        LibraryLog.log(Level.INFO, "显示所有图书");
                        getBooks(libraryManager); // 调用显示图书方法
                        break;
                    case 6:
                        LibraryLog.log(Level.INFO, "查询借阅图书");
                        getAllBorrowedBookByBorrower(sc, libraryManager); // 调用查询借阅图书方法
                        break;

                    case 7:
                        LibraryLog.log(Level.INFO, "查询图书");
                        getBookByTitle(sc, libraryManager); // 调用查询图书方法
                        break;
                    case 8:
                        LibraryLog.log(Level.INFO, "退出系统");
                        System.out.println("感谢使用图书管理系统");
                        libraryManager.saveData();
                        return; // 退出系统
                    default:
                        LibraryLog.log(Level.WARNING, "输入错误");
                        System.out.println("输入错误，请重新输入"); // 输入无效选项时提示
                }
            }
        } catch (Exception e) {
            LibraryLog.log(Level.SEVERE, "系统异常");
        }
    }


    private static void getBookByTitle(Scanner sc, LibraryManager libraryManager) {
        System.out.println("请输入要查询的图书名称：");
        String title = sc.next();
        LibraryLog.log(Level.INFO, "请输入要查询的图书名称：" + title);
        libraryManager.getBookByTitle(title);
    }

    /**
     * 处理查询借阅图书逻辑
     *
     * @param sc             控制台输入扫描器
     * @param libraryManager 图书管理器实例
     */
    private static void getAllBorrowedBookByBorrower(Scanner sc, LibraryManager libraryManager) {
        System.out.println("请输入要查询的图书借阅人：");
        String borrower = sc.next();
        LibraryLog.log(Level.INFO, "请输入要查询的图书借阅人：" + borrower);
        libraryManager.getAllBorrowedBookByBorrower(borrower);
    }

    /**
     * 显示所有图书信息
     *
     * @param libraryManager 图书管理器实例
     */
    private static void getBooks(LibraryManager libraryManager) {
        libraryManager.displayBooks(); // 调用 displayBooks 方法展示图书列表
    }

    /**
     * 处理图书归还逻辑
     *
     * @param sc             控制台输入扫描器
     * @param libraryManager 图书管理器实例
     */
    private static void returnBook(Scanner sc, LibraryManager libraryManager) {
        System.out.println("请输入要归还的图书名称：");
        String title = sc.next();
        LibraryLog.log(Level.INFO, "请输入要归还的图书名称：" + title);
        System.out.println("请输入要归还的图书用户名：");
        String userName = sc.next();
        LibraryLog.log(Level.INFO, "请输入要归还的图书用户名：" + userName);
        libraryManager.returnBook(title, userName); // 调用 returnBook 方法执行归还操作
    }

    /**
     * 处理图书借阅逻辑
     *
     * @param sc             控制台输入扫描器
     * @param libraryManager 图书管理器实例
     */
    private static void borrowBook(Scanner sc, LibraryManager libraryManager) {
        System.out.println("请输入要借阅的图书名称：");
        String title = sc.next();
        LibraryLog.log(Level.INFO, "请输入要借阅的图书名称：" + title);
        System.out.println("请输入要借阅的图书用户名：");
        String userName = sc.next();
        LibraryLog.log(Level.INFO, "请输入要借阅的图书用户名：" + userName);
        libraryManager.borrowBook(title, userName); // 调用 borrowBook 方法执行借阅操作
    }

    /**
     * 处理删除图书逻辑
     *
     * @param sc             控制台输入扫描器
     * @param libraryManager 图书管理器实例
     */
    private static void removeBook(Scanner sc, LibraryManager libraryManager) {
        System.out.println("请输入要删除的图书名称：");
        String title = sc.next();
        LibraryLog.log(Level.INFO, "请输入要删除的图书名称：" + title);
        libraryManager.removeBookByTitle(title); // 调用 removeBookByTitle 方法执行删除操作
    }

    /**
     * 处理添加图书逻辑
     *
     * @param sc             控制台输入扫描器
     * @param libraryManager 图书管理器实例
     */
    private static void addBook(Scanner sc, LibraryManager libraryManager) {
        System.out.println("请依次输入图书名称，作者，ISBN号，使用逗号分开:");
        String[] info = sc.next().split("[,，]"); // 使用逗号或中文逗号分割输入内容
        LibraryLog.log(Level.INFO, "请依次输入图书名称，作者，ISBN号，使用逗号分开：" + info[0] + "," + info[1] + "," + info[2]);
        Book book = new Book(info[0], info[1], info[2], false, null, null, null, null); // 创建图书对象
        libraryManager.addBook(book); // 调用 addBook 方法添加图书到系统中
    }
}
